home *** CD-ROM | disk | FTP | other *** search
/ MacAddict 114 / macaddict114.cdr / Software / Graphics & Multimedia / DeBabelizerServerOSX.dmg / Packages / MediaRichBase.pkg / Contents / Resources / postinstall < prev    next >
Encoding:
Text File  |  2005-09-08  |  6.5 KB  |  228 lines

  1. #!/usr/bin/perl
  2.  
  3. use English;
  4.  
  5. sub backup_and_install_properties
  6. {
  7.     my $basepath = shift;
  8.     
  9.     # Does a properties file already exist?
  10.     if (-e $basepath)
  11.     {
  12.         # Back up the user's properties file
  13.         my $count = 1;
  14.         while (-e "${basepath}.bu${count}")
  15.         {
  16.             $count++;
  17.         }
  18.         system("mv ${basepath} ${basepath}.bu${count}");
  19.     }
  20.     
  21.     # Copy the new local.properties file into place (make it 'live')
  22.     system("cp ${basepath}.orig ${basepath}");
  23.     system("chmod g+rw ${basepath}");
  24. }
  25.  
  26. sub logit
  27. {
  28.     open F, ">>/tmp/postinstall.log";
  29.     print F $_[0] . "\n";
  30.     close F;
  31. }
  32.  
  33. sub adduser # param1 = name of user to add, param2 = gid of user, param3 = real name of user
  34. {
  35.     # Get Parameters
  36.     my $newuser = shift;
  37.     my $gid = shift;
  38.     my $realname = shift;
  39.     
  40.     # Determine if the user already exists, and if so, what its id is
  41.     my $id = `niutil -readprop . /users/$newuser uid 2>/dev/null`;
  42.     chomp $id;
  43.     
  44.     # We want to assign a new user id in two cases: a) if the user
  45.     # doesn't exist, or b) if the user exists but has a positive
  46.     # user id.  It was found that creating a user with a positive
  47.     # user id was causing the 'Accounts' system preferences panel
  48.     # to act funny.
  49.     
  50.     if (!$id || $id >= 500)
  51.     {
  52.         # If the user doesn't exist, create it and set some 
  53.         # necessary property values for it
  54.         if (!$id)
  55.         {
  56.             # Create the user if it doesn't already exist
  57.             `niutil -create . /users/$newuser`;
  58.             `niutil -createprop . /users/$newuser passwd \"*\"`;
  59.             `niutil -createprop . /users/$newuser expire 0`;
  60.             `niutil -createprop . /users/$newuser gid $gid`;
  61.             `niutil -createprop . /users/$newuser shell /usr/bin/false`;
  62.             `niutil -createprop . /users/$newuser realname \"$realname\"`;
  63.             `niutil -createprop . /users/$newuser change 0`;
  64.             `niutil -createprop . /users/$newuser _writers_passwd $newuser`;
  65.         }
  66.         
  67.         # Determine the first unused user number higher than 200
  68.         $id = 200;
  69.         while (`niutil -readprop . /users/uid=$id uid 2>/dev/null`)
  70.         {
  71.             $id++;
  72.         }
  73.         
  74.         # Set the user's id
  75.         `niutil -createprop . /users/$newuser uid $id`;
  76.         
  77.     }
  78.     
  79.     # Make sure that the user's 'home' is pointing to the right place, and
  80.     # that the directory exists and is readable and writeable by the user. We
  81.     # discovered that Quicktime needs a valid user folder because it writes
  82.     # a preferences file (and hangs up if it can't)
  83.     `niutil -createprop . /users/$newuser home /Users/$newuser`;
  84.     `mkdir -p /Users/$newuser ; chown -R $newuser /Users/$newuser`;
  85.     `chgrp -R $gid /Users/$newuser ; chmod -R u+rwX /Users/$newuser`;
  86.         
  87.     return $id;
  88. }
  89.  
  90. sub addgroup # param1 = name of group to add, param2 = users to add to group
  91. {
  92.     # Get Parameters
  93.     my $newgroup = shift;
  94.     my $users = shift;
  95.     
  96.     # Create the group if it doesn't already exist
  97.     my $id = `niutil -readprop . /groups/$newgroup gid 2>/dev/null`;
  98.     chomp $id;
  99.     if (!$id)
  100.     {
  101.         # Determine the first unused group number higher than 999
  102.         $id = 1000;
  103.         while (`niutil -readprop . /groups/gid=$id gid 2>/dev/null`)
  104.         {
  105.             $id++;
  106.         }
  107.         
  108.         # Create the new group entry
  109.         `niutil -create . /groups/$newgroup`;
  110.         `niutil -createprop . /groups/$newgroup gid $id`;
  111.         `niutil -createprop . /groups/$newgroup passwd \"*\"`;
  112.         `niutil -createprop . /groups/$newgroup realname \"DeBabelizer Server Admin Group\"`;
  113.     }
  114.     
  115.     `niutil -createprop . /groups/$newgroup users $users`;
  116.     
  117.     return $id;
  118. }
  119.  
  120. my $isUpgrade = ($ARGV[4] eq "postupgrade");
  121.  
  122. # Create the 'mediarich' user and group
  123. my $mrgid = addgroup("mediarich", "root www mediarich $ENV{USER}");
  124. my $mruid = adduser("mediarich", $mrgid, "DeBabelizer Server");
  125.  
  126. # Define the stuff we need to set permissions on
  127. my @roots = (
  128.     "/Library/DeBabelizerServer",
  129.     "/Applications/Equilibrium/DeBabelizerServerSetupAssistant.app"
  130.     );
  131. my @startupItems = (
  132.     "/Library/StartupItems/MediaRichMediaGen",
  133.     "/Library/StartupItems/MediaRichSysMonitor",
  134.     );
  135. my @ourdirs = (
  136.     "/Applications/Equilibrium",
  137.     );
  138. my @sysdirs = (
  139.     "/",
  140.     "/Library",
  141.     "/Library/StartupItems",
  142.     "/Applications",
  143.     );
  144.  
  145. # Set the mod flags on all our files
  146. foreach $r (@roots)
  147. {
  148.     system("chown -R $ENV{USER} \"$r\"");
  149.     system("chgrp -R mediarich \"$r\"");
  150.     system("chmod -R ug+w,o-w \"$r\"");
  151.     system("chmod -R a+rX \"$r\"");
  152. }
  153.  
  154. # Restore the permissions on the stuff the installer screwed up (Apple bug!!!)
  155. foreach $d (@ourdirs)
  156. {
  157.     system("chown $ENV{USER} \"$d\"");
  158.     system("chgrp  mediarich \"$d\"");
  159.     system("chmod 775 \"$d\"");
  160. }
  161.  
  162. open F, "</tmp/.__MR_PERMS__";
  163. my $line = readline F;
  164. my %perms = split(/,/, $line);
  165. close F;
  166. system("echo -n > /tmp/postinstall.out");
  167. foreach $d (@sysdirs)
  168. {
  169.     my @stats = split(/:/, $perms{$d});
  170.     system("chmod $stats[0] \"$d\"");
  171.     system("chown $stats[1] \"$d\"");
  172.     system("chgrp $stats[2] \"$d\"");
  173. }
  174.  
  175. # Propagate the perms on the startup items
  176. my @stats = split(/:/, $perms{"/Library/StartupItems"});
  177. foreach $d (@startupItems)
  178. {
  179.     system("chmod -R $stats[0] \"$d\"");
  180.     system("chown -R $stats[1] \"$d\"");
  181.     system("chgrp -R $stats[2] \"$d\"");
  182. }
  183.  
  184. # Set the owner and setuid bit on our executables
  185. system("chown mediarich /Library/DeBabelizerServer/Bin/MediaEngine/MediaGen");
  186. system("chmod +s /Library/DeBabelizerServer/Bin/MediaEngine/MediaGen");
  187. system("chown mediarich /Library/DeBabelizerServer/Bin/MediaEngine/SystemMonitor");
  188. system("chmod +s /Library/DeBabelizerServer/Bin/MediaEngine/SystemMonitor");
  189.  
  190. # Setup our special setuid root tool
  191. system("chown root /Library/DeBabelizerServer/Admin/Bin/Tools/MRStartStop");
  192. system("chmod +s //Library/DeBabelizerServer/Admin/Bin/Tools/MRStartStop");
  193.  
  194. backup_and_install_properties("/Library/DeBabelizerServer/Properties/local.properties");
  195.  
  196. # Do we have a mod?  We won't for Debab Server
  197. if (-e "/Library/DeBabelizerServer/Bin/MediaEngine/mod_urltoimage.dylib")
  198. {
  199.     # Install the apache mod
  200.     my $httpdver = `httpd -v`;
  201.     if ($httpdver =~ /(\d+)\.(\d+)\.(\d+)/)
  202.     {
  203.         # Decide which version of httpd we have, and therefore which filter to install
  204.         my $filename = ($1 > 1)? "mod_urltoimage2.dylib" : "mod_urltoimage.dylib";
  205.         
  206.         # Decide where to install our .conf file (on OS X workstation, it's 'users', on OS X Server it's 'sites'
  207.         my $instdir = "";
  208.         if (-d "/etc/httpd/sites")
  209.         {
  210.             $instdir = "sites";
  211.         }
  212.         elsif (-d "/etc/httpd/users")
  213.         {
  214.             $instdir = "users";
  215.         }
  216.         
  217.         if ($instdir)
  218.         {
  219.             system("echo \"LoadModule urltoimage_module \\\"/Library/DeBabelizerServer/Bin/MediaEngine/$filename\\\"\" > /etc/httpd/$instdir/mediarich.conf.orig");
  220.             if (! -e "/etc/httpd/$instdir/mediarich.conf")
  221.             {
  222.                 system("echo \"LoadModule urltoimage_module \\\"/Library/DeBabelizerServer/Bin/MediaEngine/$filename\\\"\" > /etc/httpd/$instdir/mediarich.conf");
  223.             }
  224.         }
  225.     }
  226. }
  227.  
  228.